package com.ang.lambda;

public class Test01 {

    /**
     * 函数式接口才可以使用lambda表达式
     */
    public static void main(String[] args) {
        //定义对象
        ILike likeObj = null;
        //实现接口无参方法
        likeObj = ()->{
            System.out.println("like lambda");
        };
        //执行方法
        likeObj.like();
//--------------------------------
        //定义接口对象
        ILove loveObj = null;
        //实现接口有参方法
        loveObj = (a) -> String.valueOf(a);
        //执行方法
        String love = loveObj.love(100);
        System.out.println(love);
//--------------------------------
        //定义接口对象
        IHaveMore haveMoreObj = null;
        //实现方法，实现的是have2，因为have1有默认实现
        haveMoreObj = ()->{
            System.out.println("have lambda");
        };
        //执行have1，输出"have1"，有默认实现
        haveMoreObj.have1();
        //执行have2，输出"have lambda"
        haveMoreObj.have2();
//--------------------------------

    }

    /**
     * 只有一个方法的接口，无入参、返参
     */
    interface ILike{
        public void like();
    }

    /**
     * 只有一个方法的接口，有入参、返参
     */
    interface ILove{
        public String love(int a);
    }

    /**
     * 多个方法的接口，用default指定默认方法
     */
    interface IHaveMore{
        default public void have1(){
            System.out.println("have1");
        }

        public void have2();

        /**
         * 如果添加和have2相同的方法have3，那么如下方法会报错：
         *         haveMoreObj = ()->{
         *             System.out.println("have lambda");
         *         };
         * 因为2个相同的方法（无入参、返参），上面的方法不知道实现的是have2还是have3
         * 可以放开注释，验证；
         */
//        public void have3();
    }
}
